import request from '../../utils/request'
import PubSub from 'pubsub-js'
import moment from 'moment'
var appInstance = getApp()
// pages/songDetail/songDetail.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    isPlay:false,
    songArr:{},   //歌曲数据数组
    musicId:'',   //歌曲id
    linkAdd:'',   //歌曲链接
    currentTime:'00:00',  //实时时间
    durationTime:'00:00', //总时长
    currentWidth:0  //实时进度条的长度
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    //console.log(options)
    //参数长度过长会被自动截取掉
    //console.log(JSON.parse(options.song))
    let musicId = options.musicId
    this.getSong(musicId)
    this.setData({
      musicId
    })
    
    // 如果全局播放状态下为true，初始化该页面时，修改播放状态为true
    if(appInstance.globalData.isMucicPlay && appInstance.globalData.musicId ==musicId){
      this.setData({
        isPlay:true
      })
    }
    
    /* 创建音乐播放的实例，由于很多地方用backgroundAudioManager，把属性用this赋给页面 */
    this.backgroundAudioManager =  wx.getBackgroundAudioManager()
    
    /* 监听音乐播放，暂停,停止 */
    this.backgroundAudioManager.onPlay(()=>{
      this.changestate(true)
      //修改全局播放状态
      appInstance.globalData.musicId = musicId
    })
    this.backgroundAudioManager.onPause(()=>{
      this.changestate(false)
      //修改全局播放状态
    })
    this.backgroundAudioManager.onStop(()=>{
      this.changestate(false)
      //修改全局播放状态
    })
    
    /* 监听音乐播放实时的进度 */
    this.backgroundAudioManager.onTimeUpdate(()=>{
      //获取实时播放时间和总时间
      let currentTimeData = this.backgroundAudioManager.currentTime
      let durationTimeData = this.backgroundAudioManager.duration
      //显示实时进度条并更新
      let currentWidth = (currentTimeData/durationTimeData)*450
      //格式化实时播放时间并跟新到currentTime
      let currentTime = moment(currentTimeData*1000).format('mm:ss')
      this.setData({
        currentTime,
        currentWidth
      })
    })
    
    /* 监听音乐播放停止时自动播放下一首并把进度条和开始时间还原到00：00状态 */
    // 此功能实现不了有bug，以后解决
    this.backgroundAudioManager.onEnded(()=>{
      PubSub.publish('switchType','next')
      this.setData({
        currentWidth:0,
        currentTime:'00:00'
      })
    })
  },
  /* 切换播放状态的函数 */
  changestate(isPlay){
    this.setData({
      isPlay
    })
    //修改全局播放状态
    appInstance.globalData.isMucicPlay = isPlay
  },
  /* 切换播放状态 */
  handlePlay(){
    let playState = !this.data.isPlay
    /* this.setData({
      isPlay:playState
    }) */
    let {musicId,linkAdd} = this.data
    this.musicControl(playState,musicId,linkAdd)
  },
  /* 获取歌曲详情数据 */
  async getSong(musicId){
    let songArrData = await request('/song/detail?',{ids:musicId})
    this.setData({
      songArr:songArrData.songs[0]
    })
    /* 格式化时间 */
    let {songArr} =this.data
    let formatTiem = songArr.dt
    let durationTime = moment(formatTiem).format("mm:ss")
    this.setData({
      durationTime
    })
    wx.setNavigationBarTitle({
      title: this.data.songArr.name,
    })
  },
  /* 控制音乐播放暂停的功能 */
  async musicControl(isPlay,musicId,linkAdd){
    if(isPlay){  //开始播放
      /*如果播放状态，获取音乐播放的链接 */
      if(!linkAdd){
        let linkAddData = await request('/song/url',{id:musicId})
        linkAdd = linkAddData.data[0].url
        this.setData({
          linkAdd
        })
      }
      
      this.backgroundAudioManager.src = linkAdd
      this.backgroundAudioManager.title = this.data.songArr.name
    }
    else{   //暂停播放
      this.backgroundAudioManager.pause()
    }
  },
  //切歌函数
  handleSwitch(event){
    /* console.log(event)
    console.log(event.currentTarget.id) */
    //切歌时马上停掉当前播放的音乐
    this.backgroundAudioManager.stop()
    let type = event.currentTarget.id
    //订阅recommendSong页面的musicId消息
    PubSub.subscribe('musicId',(msg,musicId)=>{
      console.log(msg,musicId)
      this.getSong(musicId)
      this. musicControl(true,musicId)
      //取消订阅
      PubSub.unsubscribe('musicId')
    })
    //发布给recommendSong页面的消息
    PubSub.publish('switchType',type)
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})